package chapter05_string;

/**
 * 描述：字符串转数字，数字范围在32位之内
 *
 * @author hl
 * @date 2021/8/11 22:30
 */
public class Convert {

    public static void main(String[] args) {
        Convert convert = new Convert();
        int maxValue = Integer.MAX_VALUE;
        int minValue = Integer.MIN_VALUE;
        System.out.println(convert.convert(maxValue  + "" ));
    }
    public int convert(String str){
        if (!isValid(str)) {
            return 0;
        }
        boolean flag = str.charAt(0) != '-';
        int res = 0;
        int minq = Integer.MIN_VALUE / 10;
        int minr = Integer.MIN_VALUE % 10;
        int cur = 0;
        for (int i = flag ? 0 : 1; i < str.length(); i++) {
            cur = '0' - str.charAt(i);
            if (res < minq || (res == minq && cur < minr)) {
                return 0;
            }
            res = res * 10 + cur;
        }
        if(flag && res == Integer.MIN_VALUE){
            return 0;
        }
        return res;
    }

    private boolean isValid(String str) {
        if (str == null || str.length() == 0) {
            return false;
        }
        if (str.charAt(0) == '-' && (str.length() < 2 || str.charAt(1) == '0')) {
            return false;
        }
        if(str.charAt(0) == '0' && str.length() > 1){
            return false;
        }
        for (int i = 1; i < str.length(); i++) {
            if (str.charAt(i) < '0' || str.charAt(i) > '9') {
                return false;
            }
        }
        return true;
    }
}
